perm filename ARMSW[SYS,HE]8 blob sn#032853 filedate 1973-03-30 generic text, type T, neo UTF8
00100	IFN USER+TRACK,<0>
00200	STRADR:	MOVE BITSAV	;Enters here every 1/60 th. seccond
00300	IFE USER+TRACK,<
00400		TRNE DTST
00500		CALLI 400024
00600		DATAO ARM,[2]
00700		SOSLE STWT
00800		CALLI 400024
00900	>
01000		MOVE P,[XWD -PDLL,PDL]	;PUSH DOWN STACK
01100		MOVE CBUF,CBUFS
01200		MOVE DATWD,DATWDS
01300		IORI DATWD,2		;YELLOW ARM
01400	IFN REPORT+TRACK,<
01500		MOVE DATA,DATPT
01600	>
01700	IFN USER+TRACK,<
01800		TRNE DTST
01900		JRST SWDONE
02000	>
02100	IFE USER,<
02200	IFN TRACK,<
02300		SKIPE WALK
02400		JRST NCHK
02500	>
02600		CONSZ 40		;CHECK TO SEE IF ON PDP-6
02700		JRST[	MOVEI TAC,PDPERR
02800			MOVEM TAC,TRAJER
02900			JRST TOFF]
03000		CONI 0,AC
03100		ANDI AC,7
03200		CONO 0,2050(AC)
03400		TRZE TRIP		;TURN ON ARM
03500		DATAO ARM,[3]
03600	>
03700	NCHK:
03800		MOVEI K,51B23		;-10 VOLT REFERENCE
03900	IFE USER,<PUSHJ P,PREAD		;REFTR← -10 volt reference
04000		LDB AC,SNUM		;PICK UP MIDDLE SAMPLE
04100		ANDI DACVAL,7777	;LEAVE LAST SAMPLE IN J
04200		ADDI AC,(DACVAL)	;ADD THEM TOGETHER
04300	>
04400	IFN USER,<MOVEI AC,17770>
04500		CAIGE AC,17000		;IS THE FUSE BLOWN
04600		JRST[		MOVEI TAC,REFERR
04700				MOVEM TAC,TRAJER
04800				JRST TOFF]
04900		MOVEM AC,REFTR		;REFERENCE READING
05000	IFN TRACK,<
05100		SKIPE WALK
05200		JRST TOK
05300	>
05310		MOVEI AC,=8888
05328		MOVEM AC,ETIME
05346		MOVSI AC,(0.5)
05364		MOVEM AC,TDF
05400	IFE USER,<
05500		CONI CLOCK,AC
05600		TLZ AC,777774
05700		JRST STIME		;TIME IN MICRO SECONDS
05800	>
05900	IFN USER,<JRST .+2>
     

00100	NXTJIF:
00200	IFN USER,<JRST SWDONE>
00300	IFN DEB<
00400		MOVEM 17,ACSAV+17
00500		MOVEI 17,ACSAV
00600		BLT 17,ACSAV+16
00700		MOVE 17,ACSAV+17
00800	>
00900	IFN TRACK,<
01000		SKIPE WALK
01100		JRST TOK
01200	>
01300	IFN REPORT+TRACK,<
01400		HRRZI TAC,(DATA)
01500		CAIL TAC,DATO+DBL-1
01600		JRST[	SUB DATA,[XWD DBL,DBL]
01700			MOVE TAC,[XWD DATO+DBL,DATO]
01800			BLT TAC,(DATA)
01900			HRRZI AC,(DATA)
02000			HRRZ TAC,DATIWD
02100			SUBI AC,(TAC)
02200			JRST RDP]
02300		HRRZI AC,(DATA)
02400		HRRZ TAC,DATIWD
02500		SUBI AC,(TAC)
02600		HRRZ MQ,DATPT
02700		SUBI TAC,(MQ)
02800		IMUL AC,TAC
02900	RDP:	SKIPLE AC
03000	IFN TRACK,<PUSH DATA,[0]>
03100	IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
03200		MOVEI AC,DATO-1
03300		HRRZ TAC,DATIWD
03400	 	CAIL TAC,DATO+DBL-1
03500		HRRM AC,DATIWD
03600		MOVEM DATA,DATPT
03700	>
03800	IFE USER,<
03900		MOVEI TAC,=2000
     

00100	WATSTL:	CONI CLOCK,AC
00200		TLZ AC,777774
00300		SUB AC,LTIME
00400		JUMPGE AC,.+2
00500		ADD AC,[=1000000]
00600	IFN REPORT,<
00700		CAIN TAC,=2000
00800		JRST[	PUSH DATA,[<SIXBIT/TICK/>+1]
01000			PUSH DATA,AC
01100			JRST .+1]
01200	>
01300		MOVEM AC,ETIME
01400		TRNE RUN
01500		JRST[	MOVE MQ,AC
01600			FSC MQ,233
01700			FMPR MQ,[0.00006]
01800			MOVEM MQ,TDF
01900			MOVE AC,LTIME
02000			ADD AC,ETIME
02100			JRST SSTIME]
02200		CAIGE AC,=16667		;delta T greater than 16.7 msec.?
02300		SOJGE TAC,WATSTL
02400		JUMPL TAC,TE
02900		MOVSI AC,(1.0)
03000		MOVEM AC,TDF
03100		MOVE AC,LTIME
03200		ADDI AC,=16667
03300	SSTIME:	TLNE AC,777774
03400		SUB AC,[=1000000]
03500	STIME:	MOVEM AC,LTIME		;LTIME←LTIME+16.7 msec.
03600	>
04300		SOSGE COUNT
04400		JRST[TE:MOVEI AC,TERR
04500			MOVEM AC,TRAJER
04600			JRST ZITO]
04700	IFN ADJUST,<
04800		MOVEI K,14B23
04900		MOVEM BITSAV
05000		MOVEI I,2
05100	RNP:	PUSHJ P,PREAD
05200		LDB AC,SNUM
05300		FSC AC,221
05400		JSA 16,EXP
05500		JUMP AC
05600		FMPR [0.15]
05700		MOVEM FACTOR(I)
05800		SOJGE I,RNP
05900		MOVE BITSAV
06000		MOVE I,ADJI
06100		JUMPL I,MAIN
06200	IFN ADJG,<
06300		MOVE AC,ADJE
06400		FMPR AC,FACTOR
06500		MOVEM AC,KE(I)		;POT 12
06600		MOVE AC,ADJV
06700		FMPR AC,FACTOR+1
06800		MOVEM AC,KV(I)		;POT 13
06900		MOVE AC,ADJIF
07000		FMPR AC,FACTOR+2
07100		MOVEM AC,KI(I)	;POT 14
07200	>
07300	IFN ADJD,<
07400		MOVE AC,ADJE
07500		FMPR AC,FACTOR
07600		MOVEM AC,KM(I)		;POT 12
07700		MOVE AC,ADJV
07800		FMPR AC,FACTOR+1
07900		MOVEM AC,PK(I)		;POT 13
08000	>
08100	>
     

00100	MAIN:	TRNE RUN
00200		JRST[	PUSHJ P,EVAL
00300			PUSHJ P,NXTH
00400			JRST .+1]
00500		MOVEI J,6
00600		PUSHJ P,ANGLES		;read joint angles
00700		TRNE RONLY		;read angles only?
00800		JRST[	PUSHJ P,HEAD	;read hand also
00900			MOVE AC,HAND
01000			MOVEM AC,SET
01100			PUSHJ P,REFLEX
01200			PUSHJ P,READED]	;DOES NOT RETURN
01300		TRNN RUN
01400		JRST[	SKIPG TAC,FUNCT	;not run, mabye a function
01500			PUSHJ P,SETSET
01600			JUMPL TAC,NEXT
01700			JUMPE TAC,[CAIL CBUF,BUF;try next buffer
01800				SETOM (CBUF)	;dont do this if first buffer
01900				MOVEM CBUF,CBUFS
02000				ADDI CBUF,1001
02100				CAILE CBUF,BUF2
02200				MOVEI CBUF,BUF		;Advance buffer
02300				MOVE 2,(CBUF)
02400				JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
02500					JRST SWDONE]
02600				JUMPN 2,BUFRDY		;the last buffer stop.
02700				JRST[	TRO DTST
02800					MOVEI 2,WAITIN
02900					HRRM 2,JUMPBK
03000					MOVEM 2,STKPTR
03100			IFN REPORT,<PUSH DATA,[0]>
03200					JRST BUFWT]
03300			BUFRDY:	HRRZ 2,(CBUF)
03400				ADDI 2,-1(CBUF)
03500				HRRZM 2,STKPTR
03600				JRST NEXT]
03700			CAIN TAC,6
03800			JRST SETCH
03900			JRST TT]	;otherwise perform function
04000		JUMPE J,[RUDONE:
04100			TRNN NSET
04200			PUSHJ P,SETSET
04300			TRZ DROP+RUN+FINAL+WOB	 	;if J is zero then end of run
04400			TDZ DATWD,[770001252500]
04500			TRZE STP
04600			JRST[	MOVEI TAC,STPERR
04700				MOVEM TAC,TRAJER
04800				POP P,TAC
04900				JRST TOFF]
05000			SKIPN AC,FUNCT
05100			JRST NEXT
05150			CAIN AC,22
05175			JRST[	TRZ HCL
05184				SETZM TDAT
05188				SETZM FUNCT
05190				DATAO DEVT,TDAT
05193				JRST NEXT]
05200			MOVEI AC,=16667
05300			MOVEM AC,ETIME
05400			JRST .+1]
     

00100	TT:	PUSHJ P,REFLEX
00200	DISP:	MOVE AC,FUNCT
00250		JUMPL AC,.+2
00300		CAILE AC,MAXFN
00400		JRST[	MOVEI TAC,FUNERR
00410			MOVEM TAC,TRAJER
00420			JRST TOFF]
00500		JRST @.+1(AC)		;Perform function
00600		NXTJIF	;0
00700		HOPEN	;1
00800		HCLOSE	;2
00900		NXTJIF	;3
01000		PLACE	;4
01100		NUDGE	;5
01200		SETCH	;6
01300		STOP	;7
01400		SAVE	;10
01500		RESTORE	;11
01600		CENTER	;12
01700		SET.ARM	;13 SET_ARM
01800		WOBBLE	;14
01900		SEARCH	;15
02000		AOJI	;16
02100		SLAVE	;17
02200		HOME	;20
02300		PATH	;21
02400		TOOL	;22
02500	
02600		XLIST
02700		SUBTTL	SPACEWAR CODE	ANGLE MEASUREMENT	LOU PAUL
02800		LIST
     

00100	ANGLES:	MOVEI I,5
00200		JFCL 10,.+1
00300		MOVE TAC,[XWD TH,THP]
00400		BLT TAC,THP+5
00500		MOVEI L,10
00600	IFN REPORT,<PUSH DATA,[<SIXBIT/THETA/>+6]>
00700	SETCHA:	MOVEI K,CHA
00800		TRNE ALT6
00900		MOVEI K,N6CHA
01000		SKIPA
01100	RSTRT:	MOVE K,CHAN(I)
01200		SOJL L,REDER
01300	IFE USER,<
01400		PUSHJ P,PREAD
01500		LDB AC,SNUM
01600		CAIN I,5
01700		JRST[	TRNE POTREAD
01800			JRST .+1
01900			CAIL AC,1000
02000			CAILE AC,7000
02100			JRST[	TRC ALT6
02200				JRST SETCHA]
02300			MOVEI K,CHA5
02400			JRST .+1]
02500		ANDI DACVAL,7777
02600		ADDI AC,(DACVAL)
02700		SETZ TAC,
02800		DIV AC,REFTR
02900		ASH AC,-26
03000		MOVE TAC1,AC
03100		TRNE POTREAD
03200		JRST[	ADDI TAC1,=1000
03300			JRST EXON]
03400		ASHC AC,-11		;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
03500		LDB MQ,NON(I)		;GET LOWER DIFF
03600		ADDI TAC1,(MQ)		;ADD IT TO READING
03700		AOJ AC,
03800		LDB AC,NON(I)		;GET UPPER DIFFERENCE
03900		SUBI AC,(MQ)
04000		MUL TAC,AC		;INTERPOLATE
04100		ADD TAC1,TAC		;CORRECTED READING
04200		FSC TAC1,226		;FLOAT
04300		FMPR TAC1,SCALE(I)
04400		FADR TAC1,OFF(I)
04500	>
04600	IFN USER,<
04700		MOVE TAC1,ERR(I)
04800		FSC TAC1,-1
04900		FADR TAC1,T0(I)
05000	>
05100		CAIN I,5
05200		JRST[	TRNE ALT6
05300			FADR TAC1,OFF6
05400			FADR TAC1,ROT6
05500			MOVEM TAC1,TH+5
05600			FSBR TAC1,T0+5
05700			MOVSI MQ,(180.0)
05800			CAML TAC1,MQ
05900			JRST[	INCROT:	MOVN MQ,MQ
06000					FSC MQ,1
06100					FADRM MQ,ROT6
06200					FADRM MQ,TH+5
06300					JRST THS]
06400			MOVN MQ,MQ
06500			CAMG TAC1,MQ
06600			JRST INCROT
06700			JRST THS]
06800	EXON:	MOVEM TAC1,TH(I)		;THETA
06900	THS:	CAILE I,2
07000		JRST[	MOVE AC,TH(I)
07100			FSBR AC,THP(I)
07200			FDVR AC,TDF
07300			MOVEM AC,TD(I)
07400			JRST SERVO]
07500	IFN REPORT,<
07600		MOVE MQ,TH(I)
07700		FSBR MQ,T0(I)
07800		PUSH DATA,MQ
07900	>
     

00100	IFE USER,<
00200		MOVE K,VCHAN(I)
00300	NVEL:	PUSHJ P,PREAD
00400		LDB AC,SNUM
00500		ANDI DACVAL,7777
00600		ADDI AC,(DACVAL)
00700		TRNE VZERO
00800		MOVEM AC,VZ(I)
00900		SUB AC,VZ(I)
01000		FSC AC,216
01100		FMPR AC,VSCALE(I)
01200	IFN TACH,<
01300		TRNE VZERO
01400		SETZM VDTH(I)
01500		FADRM AC,VDTH(I)
01600	>
01700		MOVEM AC,TD(I)
01800	>
01900		XLIST
02000				SUBTTL			SPACEWAR CODE			SERVO CALC.			LOU PAUL
02100		LIST
     

00100	SERVO:	TRNN RUN
00200		JRST[	SOJGE I,RSTRT
00300			POPJ P,]
00400	SERVL:	MOVE TAC,TH(I)
00500		FSBR TAC,T0(I)		;POSITION ERROR
00600		MOVEM TAC,ET0(I)
00700		TRNE FINAL
00800		JRST NULL		;MODIFY THETA BY INTEGRAL TERM
00900		MOVE TAC1,T0(I)
01000		FSBR TAC1,T0P(I)
01100		FDVR TAC1,TDF
01200		MOVE AC,TAC1
01300		FSBR AC,TDP(I)
01400		MOVEM TAC1,TDP(I)
01500		FDVR AC,TDF
01600		MOVEM AC,TDD(I)
01700		FMPR AC,CII(I)
01950	MODT0:	HRRZ K,BMASK(I)
02000		TDNN K,FBI
02100		JRST [	PDIR:SETZM ET0(I)
02150			FMPR AC,CII(I)
02200			JRST NOBACK]
02300		FADRM TAC,ERRINT(I)
02700	IFE STEP,<
02800		MOVN TAC,TD(I)
02900		FADR TAC,TAC1
03000	>
03100	IFN STEP,<MOVN TAC,TD(I)>
03200		FMPR TAC,KV(I)		;VELOCITY GAIN
03300		FADR AC,TAC
03350		FMPR AC,CII(I)
03400		MOVN TAC,ET0(I)
03500		FMPR TAC,KE(I)		;ERROR GAIN
03700		FADR AC,TAC
03710		MOVN TAC,ERRINT(I)
03720		FMPR TAC,KI(I)
03820		FDVR TAC,CII(I)
03900		FADR AC,TAC
04000	NOBACK:	CAIE I,2
04100		FMPR AC,[IRAD:0.0174532925]	;JOINT 3 IS IN INCHES
04200		MOVEM AC,TORE(I)
04300		FADR AC,CI(I)		;GRAVITY TERM
04400		MOVEM AC,T(I)			;ERROR CORRECTION TORQUE
04500		XLIST
04600				SUBTTL			SPACEWAR CODE			DRIVE CALC.			LOU PAUL
04700		LIST
     

00100	DRIVE:
00200	IFN REPORT,<PUSH DATA,[<SIXBIT/DAC/>+6]>
00300	LS0:	TDNN DATWD,BMASK(I)
00400		JRST ISP
00500		MOVE MQ,TD(I)
00600		JUMPN MQ,.+2
00700		MOVN MQ,ET0(I)
00800		FMPR MQ,T(I)
00900		JUMPL MQ,[	MOVM MQ,T(I)
01000				FSBR MQ,F0(I)
01100				JUMPL MQ,[	FDVR MQ,F0(I)
01200						FMPR MQ,V0(I)
01300						FSC MQ,1
01400						FADR MQ,V0(I)
01500						SKIPGE T(I)
01600						MOVN MQ,MQ
01700						JRST CEMF]
01800				MOVSI AC,(1.0)
01900				FSBR AC,PK(I)
02000				FMPR MQ,AC
02100				FMPR MQ,KM(I)
02200				FADR MQ,V0(I)
02300				SKIPG T(I)
02400				MOVN MQ,MQ
02500				JRST CEMF]
02600		SKIPN T(I)
02700		JRST[		SKIPN TD(I)
02800				JRST CEMF
02900				MOVE MQ,V0(I)
03000				SKIPGE TD(I)
03100				MOVN MQ,MQ
03200				JRST CEMF]
03300		JUMPE MQ,NOEX
03400		MOVE MQ,V0(I)
03500		SKIPGE T(I)
03600		MOVN MQ,MQ
03700	NOEX:	MOVSI AC,(1.0)
03800		FADR AC,PK(I)
03900		FMPR AC,T(I)
04000		FMPR AC,KM(I)
04100		FADR MQ,AC
04200	CEMF:
04300		MOVE AC,EMF(I)
04400		FMPR AC,TD(I)
04500		MOVSI TAC1,(30.0)
04600		JUMPGE MQ,DRVLT
04700		MOVN AC,AC
04800	DRVLT:	FSBR TAC1,AC			;Available drive voltage
04900		CAMGE TAC1,[1.0]
05000		JRST MAXDRV
05100	VELOK:	MOVM AC,MQ
05200		FDVR AC,TAC1		;AC= REL TIME ON
05300		FIX AC,211000		;1=16
05400		CAML AC,[4000000]
05500		JRST DHO		;too much force stop the arm
05600		CAILE AC,776000
05700	MAXDRV:	MOVEI AC,776000
05800	IFN REPORT+TRACK+USER+DEB,<
05900		MOVEM AC,MOTOR(I)
06000		SKIPGE MQ
06100		MOVNS MOTOR(I)
06200	>
06300		TRC AC,400000
06400		HRL AC,I
06500	SETDRV:
06600	IFN TRACK,<SKIPN WALK>
06700		DATAO WIDTH,AC
06800		TDZ DATWD,DMASK(I)
06900		JUMPGE MQ,ISP
07000		TDO DATWD,DMASK(I)
07100	ISP:	SKIPE REV(I)
07200		TDC DATWD,DMASK(I)
07300	IFN REPORT,<PUSH DATA,MOTOR(I)>
07400		DATAO ARM,DATWD
07500		SOJGE I,RSTRT
07600		JFCL 10,DHO
07700	IFN TRACK,<SKIPN WALK>
     

00100		TRZ VZERO
00200		SETZM ASTP
00300		TRNE STP
00400		JRST[	MOVEI I,5
00500		MTL:	MOVE MQ,TORE(I)
00600			FDVR MQ,F0(I)
00700			SKIPN TD(I)
00800			FSC MQ,-2
00900			FMPR MQ,STQ(I)
01000			FADRM MQ,ASTP
01100			SOJGE I,MTL
01200			MOVE AC,ASTP
01300			CAML AC,SDTQ
01400			JRST[	AOS AC,ASTPP
01500				CAIL AC,2
01600				JRST[	TRZ STP
01700					SUB P,[XWD 1,1]
01800					SETZM ERRINT
01900					MOVE AC,[XWD ERRINT, ERRINT+1]
02000					BLT AC,ERRINT+5
02100					JRST RUDONE]
02200				POPJ P,]
02300			SETZM ASTPP
02400			POPJ P,]
02500		POPJ P,
02600	
02700	NULL:	SETZB AC,TAC1
02800		TLNN DATWD,NNUL
02900		TRNE WOB
03000		SOJA J,MODT0
03100		TDNN DATWD,GMASK(I)
03200		SOJA J,DRIVE
03300		MOVE MQ,FBI
03400		TDNN MQ,GMASK(I)
03500		SOJA J,PDIR
03600		MOVM MQ,TAC			;|POSITION ERROR|
03700		CAMLE MQ,ERR(I)			;COMPARE POSITION ERROR
03800		JRST MODT0
03900		MOVM MQ,TD(I)
04000		CAMLE MQ,ERR(I)
04100		JRST MODT0
04200	SO:	TDZ DATWD,BMASK(I)
04300	IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
04400		DATAO ARM,DATWD
04500		HRLZ MQ,I
04600		TRC MQ,400000
04700		DATAO WIDTH,MQ
04800		SOJA J,DRIVE
04900		POPJ P,
05000	
05100		XLIST
05200		SUBTTL	SPACEWAR CODE				LOU PAUL
05300		LIST
     

00100	NXTH:	MOVE AC,[XWD T0,T0P]
00200		BLT AC,T0P+5
00300		TRNE WOB
00400		JRST[	MOVEI I,2
00500		WL1:	SOSGE J,WOBCNT(I)
00600			JRST[	MOVEI J,=19
00700				MOVEM J,WOBCNT(I)
00800				JRST WL2]
00900		WL2:	MOVE AC,SIN(J)
01000			FMPR AC,WOBMAG
01100			FADRM AC,TFF+3(I)
01200			SOJGE I,WL1
01300			JRST .+1]
01400		TRNE DROP
01500		JRST[	MOVEI I,5
01600		OL:	MOVE AC,DELTH(I)
01700			FMPR AC,TDF
01800			FADRM AC,DTH(I)
01900			SOJGE I,OL
02000			JRST JALS]
02100	NTH:
02200		TRNE INCREM
02300		JRST[	MOVE MQ,ETIME
02400			ADDB MQ,TICKS
02500			CAML MQ,NTICKS
02600			JRST[	TRZ INCREM
02700				SKIPN TP
02800				TRO FINAL
02900				MOVEI AC,=600
03000				MOVEM AC,COUNT
03005				SKIPN TP(I)
03010				TLNN DATWD,INT
03020				JRST FIL1
03100				MOVE AC,[XWD NC,CI]
03200				BLT AC,CII+5
03300			FIL1:	MOVEI I,5
03400			FIL:	MOVE AC,DELTH(I)
03500				FADRB AC,DTH(I)
03600				FADR AC,TFF(I)
03700				MOVEM AC,T0(I)
03800				SETZM DELTH(I)
04100				SOJGE I,FIL
04200				POPJ P,]
04300			SETZ I,
04400			DIV MQ,NTICKS
04500			ASH MQ,-10
04600			FSC MQ,200
04700			MOVSI AC,(6.0)
04800			FMPR AC,MQ
04900			FADR AC,[-15.0]
05000			FMPR AC,MQ
05100			FADR AC,[10.0]
05200			FMPR AC,MQ
05300			FMPR MQ,MQ
05400			FMPR MQ,AC
05500			MOVEI I,5
05600		LDC:	MOVE AC,DELTH(I)
05700			FMPR AC,MQ
05800			FADR AC,DTH(I)
05900			FADR AC,TFF(I)
06000			MOVEM AC,T0(I)
06005			SKIPN TP
06010			TLNN DATWD,INT
06020			JRST LDC1
06100			MOVE AC,DCI(I)
06200			FMPR AC,MQ
06300			FADR AC,PC(I)
06500			MOVEM AC,CI(I)
06600			MOVE AC,DCII(I)
06700			FMPR AC,MQ
06800			FADR AC,PCC(I)
06900			MOVEM AC,CII(I)
07000		LDC1:	SOJGE I,LDC
07100			POPJ P,]
07200	JALS:	MOVEI I,5
07300	JAL:	MOVE AC,DTH(I)
07400		FADR AC,TFF(I)
07500		MOVEM AC,T0(I)
07600		SOJGE I,JAL
07700		POPJ P,
07800	
     

00100	EVAL:	MOVEI I,5
00200	EL:	MOVE J,TP(I)	;POINTS TO KOE5
00300		JUMPE J,NE
00400		MOVE MQ,ETIME
00500		ADDB MQ,TJ(I)
00600		CAML MQ,TN(I)	;NUMBER OF TICKS THIS SEGMENT
00700		JRST[			;END OF SEGMENT
00800			CAIN I,5
00900			JRST[			;JOINT 6 HAS CONTROL WORD
01000				MOVE TAC,TICKS
01100				CAMGE TAC,NTICKS
01200				TRO INCREM
01300				LDB TAC,[POINT 3,1(J),2]	;LEVEL
01400				JUMPN TAC,[			;SWITCH POINT
01500					SKIPG LOOP(TAC)
01600					JRST[			;INITIALIZE LOOP
01700						LDB AC,[POINT 15,1(J),17]
01800						MOVEM AC,LOOP(TAC)	;COUNT
01900						JRST SETALT]
02000					SOSLE LOOP(TAC)		;IN LOOP
02100				SETALT:	TRO ALT
02200					JRST GETNXT]
02300				JRST GETNXT]
02400		GETNXT:	TRNE ALT
02500			JRST[	LDB J,[POINT 9,(J),8]	;ALT POINTER
02600				JRST GOT]
02700			LDB J,[POINT 9,(J),17]		;NEXT POINTER
02800			JUMPE J,[SETZM TP(I)
02900				TRO FINAL
03000				MOVEI AC,=600
03100				MOVEM AC,COUNT
03200				MOVE TAC,[XWD NC,CI]
03300				BLT TAC,CI+=11
03400				MOVE AC,A4(I)
03500				ADD AC,A3(I)
03600				ADD AC,A2(I)
03700				ADD AC,A1(I)
03800				ADD AC,A0(I)
03900				XOR AC,SC(I)
04000				FSC AC,0
04100				MOVEM AC,TFF(I)
04200				JRST NE]
04300		GOT:	ADDI J,(CBUF)
04400			MOVEM J,TP(I)
04500			SUB MQ,TN(I)	;MICRO SEC INTO NEW SEGMENT
04600			MOVEM MQ,TJ(I)	;INITIALIZE
04700			HRRZ AC,(J)
04800			ASH AC,16
04900			MOVEM AC,TN(I)
05000			CAIN I,5
05100			JRST[
05200				HRRZ AC,1(J)
05300				ADDI AC,(CBUF)
05400				MOVEI MQ,6(AC)
05500				MOVEI K,5
05600				MOVE MQ,(MQ)		;NEW DATWD
05700			FTF:	MOVE TAC,GMASK(K)
05800				TDNN TAC,FBI
05900				JRST[	TDNN TAC,MQ	;WAS FREE
06000					JRST FNF	;STILL FREE
06100					MOVE TAC,TH(K)
06200					MOVEM TAC,T0(K)
06300					FSBR TAC,TFF(K)
06400					MOVEM TAC,DTH(K)
06500					MOVNM TAC,DELTH(K)
06600					MOVE TAC,TN+5
06700					ASH TAC,16
06800					MOVEM TAC,NTICKS
06900					SETZM TICKS
07000					TRO INCREM
07100					JRST FNF]
07200				TDNN TAC,MQ		;NOT FREE
07300				JRST[	MOVE TAC,TDD(K)	;NOW IS FREE
07400					CAIE K,2
07500					FMPR TAC,IRAD
07600					FMPR TAC,CII(K)
07650					FMPR TAC,CII(K)
07700					FSBR TAC,T(K)
07800					MOVNM TAC,NC(K)
07900					JRST FNF]
08000			FNF:	SOJGE K,FTF
08010				PUSHJ P,UPDC
08100				JRST DDELC]
08200		DDELC:	HLRE AC,-3(J)
08300			MOVEM AC,A4(I)
08400			HRRE AC,-3(J)
08500			MOVEM AC,A3(I)
08600			HLRE AC,-2(J)
08700			MOVEM AC,A2(I)
08800			HRRE AC,-2(J)
08900			MOVEM AC,A1(I)
09000			HLLZ AC,-1(J)
09100			MOVEM AC,SC(I)
09200			HRRE AC,-1(J)
09300			MOVEM AC,A0(I)
09400			MOVE MQ,TJ(I)
09500			JRST ELL]
09600	ELL:	DIV MQ,TN(I)
09610		TLNE DATWD,INT
09700		CAIE I,5
09710		JRST ELL1
09800		MOVEI K,=11
09900		HLRE TAC,MQ
10000		FSC TAC,211
10100	DECC:	MOVE AC,DCI(K)
10200		FMPR AC,TAC
10300		FADR AC,PC(K)
10400		MOVEM AC,CI(K)
10500		SOJGE K,DECC
10700	ELL1:	MOVE AC,A4(I)
10800		MUL AC,MQ
10900		ADD AC,A3(I)
11000		MUL AC,MQ
11100		ADD AC,A2(I)
11200		MUL AC,MQ
11300		ADD AC,A1(I)
11400		MUL AC,MQ
11500		ADD AC,A0(I)
11600		XOR AC,SC(I)
11700		FSC AC,0
11800		MOVEM AC,TFF(I)
11900		CAIN I,5
12000		JRST[	MOVE AC,TFF+5
12100			FSBR AC,T0+5
12200			MOVSI MQ,(180.0)
12300			CAML AC,MQ
12400			JRST[	INCT0:	FSC MQ,1
12500					FADRM MQ,T0+5
12600					JRST .+1]
12700			MOVN MQ,MQ
12800			CAMG AC,MQ
12900			JRST INCT0
13000			JRST .+1]
13100	NE:	SOJGE I,EL
13200		TRZ ALT
13300		POPJ P,
13400	
     

00100	DHO:	AOJ I,			;DISASTER HAS OCCURED
00200		LSH I,3			;JOINT NUMBER
00300		IORI I,EXER
00400		MOVEM I,TRAJER
00500		POP P,I
00600	ZITO:	SETZM ERRINT
00700		MOVE AC,[XWD ERRINT,ERRINT+1]
00800		BLT AC,ERRINT+5
00900	
01000	TOFF:	MOVE AC,STKPTR
01100		MOVEM AC,ERRSTK
01150		DATAO DEVT,[0]
01200		MOVEI L,1000
01300		TRNE RONLY
01400		JRST READED
01500		TRZ RUN+FINAL+DROP+INCREM+HCL+STP+WOB		;STOP THE ARM
01600		SETZM TP
01700		MOVE AC,[XWD TP,TP+1]
01800		BLT AC,TP+5
01900		PUSHJ P,SETSET
02000	MOVNXT:	AOS AC,STKPTR
02100	MOVNX:	SOJL L,[ LE:
02200			MOVEI TAC,LOOPER
02300			MOVEM TAC,TRAJER
02400			JRST PW]
02500		HLRE TAC,@STKPTR
02600		CAIN TAC,3		;IS IT A WAIT
02700		JRST MOVNXT
02800		CAIN TAC,SKPERR
02900		JRST[	HRRZ TAC,(AC)
03000			CAMN TAC,TRAJER
03100			JRST[	AOS STKPTR
03200				JRST NEXT]
03300			JRST MOVNXT]
03400		CAIN TAC,SKPNER
03500		JRST[	HRRZ TAC,(AC)
03600			CAME TAC,TRAJER
03700			JRST[	AOS STKPTR
03800				JRST MOVNXT]
03900			JRST NEXT]
04000		CAIN TAC,SKPSER
04100		JRST[	LDB MQ,[POINT 3,(AC),35]
04200			LDB TAC,[POINT 3,TRAJER,35]
04300			CAIN TAC,(MQ)
04400			JRST[	HRRZ TAC,(AC)
04500				ANDI TAC,777770
04600				TDNE TAC,TRAJER
04700				JRST[	AOS STKPTR
04800					JRST NEXT]
04900				JRST MOVNXT]
05000			JRST MOVNXT]
05100		CAIN TAC,JMPREL
05200		JRST[	HRRE TAC,(AC)
05300			ADDI AC,(TAC)
05400			HRRM AC,STKPTR
05500			JRST MOVNX]
05600	PW:	CAIL AC,BUF
05700		HRRM AC,JUMPBK
05800		MOVEI AC,WAITIN
05900		MOVEM AC,STKPTR
06000		MOVEI AC,3
06100		MOVEM AC,FUNCT
06200	IFN TRACK,<SKIPN WALK>
06300		DATAO ARM,[2]		;STOP THE ARM
06400	IFN REPORT,<PUSH DATA,[0]>
06500	READED:	TRO DTST
06600	IFN DEB,<
06700		MOVEM 17,ACSAV+17
06800		MOVEI 17,ACSAV
06900		BLT 17,ACSAV+16
07000	>
07100		JRST SWDONE
07200	
     

00100	NEXT:	TRNE RUN
00200		JRST[	SETZM FUNCT
00300			JRST NXTJIF]
00400		MOVEI L,1000
00500		MOVE AC,FUNCT
00600		CAIE AC,6		;SET TOUCH
00700		JRST[	MOVE TAC,SOTCHS
00800			MOVEM TAC,SOTCH
00900			TRZ STCH
01000			JUMPE TAC,.+1
01100			TRO STCH
01200			JRST .+1]
01300	IFN TRACK,<SKIPN WALK>
01400		MOVEI DATWD,2
01500		DATAO ARM,DATWD		;STOP THE ARM
01600	INCPIC:	AOS AC,STKPTR
01700	PICKUP:	SOJL L,LE
01800		HLRE TAC,@STKPTR
01900		CAIN TAC,JMPABS
02000		JRST[JMPA:HRRZ TAC,@STKPTR
02100			MOVEM TAC,STKPTR
02200			HLRZ TAC,@STKPTR
02300			CAIN TAC,3
02400			JRST INCPIC
02500			JRST PICKUP]
02600		CAIN TAC,SKPERR
02700		JRST[	HRRZ TAC,@STKPTR
02800			CAMN TAC,TRAJER
02900			AOS STKPTR
03000			JRST INCPIC]
03100		CAIN TAC,SKPNER
03200		JRST[	HRRZ TAC,@STKPTR
03300			CAME TAC,TRAJER
03400			AOS STKPTR
03500			JRST INCPIC]
03600		CAIN TAC,SKPSER
03700		JRST[	LDB MQ,[POINT 3,@STKPTR,35]
03800			LDB TAC,[POINT 3,TRAJER,35]
03900			CAIN TAC,(MQ)
04000			JRST[	HRRZ TAC,@STKPTR
04100				ANDI TAC,777770
04200				TDNE TAC,TRAJER
04300				AOS STKPTR
04400				JRST INCPIC]
04500			JRST INCPIC]
04600		CAIN TAC,JMPREL
04700		JRST[	HRRE TAC,@STKPTR
04800			ADD TAC,STKPTR
04900			HRRM TAC,STKPTR
05000			JRST PICKUP]
05100		SETZM TRAJER
05200		MOVEI I,100
05300		MOVEM I,COUNT
05400		TRZE TAC,MERGE
05500		TRO BOTH
05600		MOVEM TAC,FUNCT
05700		CAIN TAC,3		;IS IT A WAIT
05800		JRST[	MOVE TAC,STKPTR
05900			CAIL TAC,BUF
06000			HRRM TAC,JUMPBK
06100			MOVEI TAC,WAITIN
06200			MOVEM TAC,STKPTR
06300	IFN REPORT,<PUSH DATA,[0]>
06400			TRO DTST
06500			PUSHJ P,SWDONE]
06600	MARK:
06700	IFN REPORT,<
06800		PUSH DATA,[<SIXBIT/NEXT/>+1]
06900		MOVE TAC,FUNCT
07000		HRL TAC,0
07100		PUSH DATA,TAC
07200	>
07300	
07400	;	JRST DISP
07500	SWDONE:
07600		MOVEM BITSAV
07700		MOVEM DATWD,DATWDS
07800		MOVEM CBUF,CBUFS
07900	IFN REPORT+TRACK,<
08000		MOVEM DATA,DATPT
08100	>
08200	IFE USER,<
08300	IFN TRACK,<
08400		SKIPE WALK
08500		JRST @STRADR-1
08600	>
08800		CALLI 400024
08900	>
09000	IFN USER,<
09100		JRST @STRADR-1
09200	>
09300	
09400	SETSET:	MOVEI I,5
09500	TCHK:	MOVE J,TP(I)
09600		JUMPE J,ATEND
09700		SETZM TJ(I)
09800		SETZM TN(I)
09900	GNN:	LDB J,[POINT 9,(J),17]
10000		ADDI J,(CBUF)
10100		CAIN J,(CBUF)
10200		JRST[	MOVEM J,TP(I)
10300			JRST ATEND]
10400		JRST GNN
10500	ATEND:	SOJGE I,TCHK
10600		PUSHJ P,EVAL
10700		MOVEI I,5
10800	FDTH:	MOVE AC,TH(I)
10900		MOVEM AC,T0(I)
11000		FSBR AC,TFF(I)
11100		MOVEM AC,DTH(I)
11200		SETZM DELTH(I)
11300		SETZM TDP(I)
11400		SETZM TDD(I)
11500		SOJGE I,FDTH
11600		POPJ P,
11700	
11800	UPDC:	MOVE TAC,[XWD NC,PC]
11900		BLT TAC,PCC+5
12000		HRL AC,AC
12100		HRRI AC,NC
12200		BLT AC,NC+6
12500		MOVE DATWD,NC+6
12600		HRRZM DATWD,FBI
12700		MOVEI K,5
12800	UPL:	MOVE AC,NC(K)
12900		HLLZM AC,NC(K)
13000		HRLZM AC,NCC(K)
13400		MOVE AC,MOTARM(K)
13500		FADRB AC,NCC(K)
13510		TLNN DATWD,INT
13520		JRST UPL1
13600		FSBR AC,PCC(K)
13700		MOVEM AC,DCII(K)
13710		MOVE AC,NC(K)
13720		FSBR AC,PC(K)
13730		MOVEM AC,DCI(K)
13800	UPL1:	TDNE DATWD,BMASK(K)
13900		TDO DATWD,BMASK(K)
14000		SOJGE K,UPL
14010		TLNE DATWD,INT
14100		POPJ P,
14130		MOVE AC,[XWD NC,CI]
14140		BLT AC,CII+5
14150		POPJ P,
     

00100	PREAD:
00200	IFN TRACK,<
00300		SKIPE WALK
00400		JRST[GNPR:AOBJP DATA,[	MOVE AC,[IOWD DBL,DATO]
00500					MOVEM AC,DATPT
00600					MOVE DATA,DATPT
00700					SETZ TAC,
00800					INPUT 15,1
00900					JRST GNPR]
01000			MOVE DACVAL,(DATA)
01100			JRST @READFN]
01200	>
01300		MOVEI TAC,10
01400		MOVEM TAC,DATMSD
01500	DACRED:	SOSGE DATMSD
01600		JRST[REDER:	MOVEI TAC,READER	
01700				MOVEM TAC,TRAJER
01800				JRST TOFF]
01900	DACST:	CONO DB,4250
02000		CONO AD,(K)
02100	NREAD:	MOVEI TAC,30
02200		CONSO DB,1000
02300		SOJGE TAC,.-1
02400		JUMPL TAC,[DACDIE:CONO AD,4000(K)	;STOP DAC
02500				TRO REREAD
02600			IFN DEB,<MOVEM DACVAL,DACERR>
02700				MOVEI TAC,12
02800			WRH:	SOJGE TAC,WRH
02900				JRST DACRED]
03000		DATAI DB,DACVAL
03100		CONSZ DB,10000
03200		JRST DACDIE
03300		XOR DACVAL,SBMSK
03400	IFN TRACK,<PUSH DATA,DACVAL>
03500		JRST @READFN
03600	FREAD:	ADDI K,770000
03700	IFN TRACK,<SKIPN WALK>
03800		CONO AD,4000(K)	;STOP AD ON NEXT CHANNEL
03900		POPJ P,
04000	READFN:	FREAD
04100	
04200		XLIST
04300		SUBTTL	CONSTANTS				LOU PAUL
04400		LIST
     

00100	NON:	POINT 12,INNER(AC),11
00200		POINT 12,INNER(AC),23
00300		POINT 12,INNER(AC),35
00400		POINT 12,OUTER(AC),11
00500		POINT 12,OUTER(AC),23
00600		POINT 12,OUTER(AC),35
00700	ERR:	0.05
00800		0.05
00900		0.01
01000		0.1
01100		0.1
01200		0.7
01300	TH:	BLOCK 6		;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
01400	HAND:	3.0
01500	TDD:	BLOCK 6
01600	ERRINT:	0
01700		0
01800		0
01900		0
02000		0
02100		0
02200	DTH:	BLOCK 6
02300	TD:	BLOCK 6
02400	T0P:	BLOCK 6
02500	TDP:	BLOCK 6
02600	ET0:	BLOCK 6
02700	T0:	-150.0
02800		-75.0
02900		14.0
03000		-90.0
03100		 60.0
03200		 0.0000
03300	TFF:	-150.0
03400		-75.0
03500		14.0
03600		-90.0
03700		 60.0
03800		 0.0000
03900	DELTH:	BLOCK 6		;THIS AND THE NEXT ARE BLT ED TOGETHER
04000	DDTH:	0
04100		0
04200		0
04300		0
04400		0
04500		0
04600	NTICKS:	0
04700	DTHS:	BLOCK =30
04800	TORE:	BLOCK 6
04900	T:	BLOCK 6
05000	IFN USER+REPORT+TRACK+DEB,<MOTOR:	BLOCK 6>
05100	FBI:	252502
05200	VZ:	BLOCK 3
05300	IFN TACH,<
05400	VDTH:	BLOCK 3
05500	>
05600	THP:	BLOCK 6
05700	MOTARM:	840.0
05800		900.0
05900		70.0
06000		55.0
06100		55.0
06200		64.0
06300	STQ:	BLOCK 6
06400	SDTQ:	0
06500	ASTP:	0
06600	ASTPP:	0
06700	PC:	BLOCK 6
06800	PCC:	BLOCK 6
06900	DCI:	BLOCK 6
07000	DCII:	BLOCK 6
07100	CI:	0
07200		0
07300		0
07400		0
07500		0
07600		0
07700	CII:	1000.0
07800		1200.0
07900		100.0
08000		100.0
08100		100.0
08200		100.0
08300	NC:	0
08400		0
08500		0
08600		0
08700		0
08800		0
08900	NCC:	1000.0
09000		1200.0
09100		100.0
09200		100.0
09300		100.0
09400		100.0
10200	IFN DEB,<DACERR:	0>
10300	REFTR:	0
10400	ETIME:	=8888
10500	TDF:	0.5
10600	IFN DEB,<
10700	ETIM:	0
10800	ACSAV:	BLOCK 20
10900	>
11000	PDL:	DHO
11100		BLOCK PDLL
11200	LTIME:	0
11300	FUNCT:	0
11400	ROT6:	0
11500	TRAJER:	0
11600	DOING:	0
11700	DATMSD:	0
11800	CBUFS:	0
11900	DATWDS:	0
12000	SNUM:	POINT 12,DACVAL,23
12100	SBMSK:	400040004000
12200	REV:	0
12300		0
12400		-1
12500		0
12600		-1
12700		-1
12800	DMASK:	400000
12900		100000
13000		20000
13100		4000
13200		1000
13300		200
13400	BMASK:	XWD 400000,200000
13500		XWD 200000, 40000
13600		XWD 100000, 10000
13700		XWD  40000,  2000
13800		XWD  20000,   400
13900		XWD  10000,   100
14000	GMASK:	200000
14100		 40000
14200		 10000
14300		  2000
14400		   400
14500		   100
14600	VCHAN:	52B23
14700		53B23
14800		54B23
14900	CHAN:	55B23
15000		56B23
15100		57B23
15200		60B23
15300		61B23
15400	GAIN:	MOVEI I,5
15500	SETGN:	MOVE AC,KV(I)
15600		FMPR AC,AC
15700		FMPR AC,THIRD
15800		MOVEM AC,KE(I)
15900		FMPR AC,KV(I)
16000		FMPR AC,SIXTH
16100		MOVEM AC,KI(I)
16200		SOJGE I,SETGN
16300		MOVE 1,[SIXBIT/[ARM]/]
16400		CALLI 1,400002
16500		MOVE I,RET
16600		MOVEM I,GAIN
16700		JRST GAIN
16800	RET:	POPJ P,
16810	THIRD:	0.3
16820	SIXTH:	0.1
16900		BLOCK 7
17000		0
17100	WAITIN:	XWD 3,0
17200	JUMPBK:	XWD JMPABS,WAITIN
17300	STKPTR:	WAITIN
17400	ERRSTK:	0
17500	BITSAV:	0
17600	COUNT:	0
17700	STWT:	0
17800	HCNT:	0
17900	TP:	0
18000		0
18100		0
18200		0
18300		0
18400		0
18500	TJ:	BLOCK 6
18600	LOOP:	BLOCK 10
18700	TN:	BLOCK 6
18800	SC:	BLOCK 6
18900	A0:	BLOCK 6
19000	A1:	BLOCK 6
19100	A2:	BLOCK 6
19200	A3:	BLOCK 6
19300	A4:	BLOCK 6
19400	BLOCKS:	0
19500	NXTBUF:	0
19600	BUF:	0
19700		BLOCK 1000
19800	BUF2:	0
19900		BLOCK 1000
20000	IFN ADJUST<
20100	ADJI:	-1
20200	ADJE:	0
20300	ADJV:	0
20400	ADJIF:	0
20500	FACTOR:	BLOCK 3
20600	>
20700	IFN REPORT+TRACK,<
20800	DATIWD:	0
20900		0
21000	DATPT:	0
21100	DATO:	BLOCK DBL+100
21200	>
21300	IFN DYNAMICS,<
21400	DDAT:	<SIXBIT/FORD/>+6
21500	FOR:	BLOCK 6
21600		<SIXBIT/BACK/>+6
21700	BAK:	BLOCK 6
21800	>